package com.example.common.result;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum BaseErrorCode implements IErrorCode  {

    /**
     * A 开头的错误码定义为客户端错误
     */
    // ========== 一级宏观错误码 客户端错误 ==========
    CLIENT_ERROR("A000001", "用户端错误"),

    // ========== 二级宏观错误码 常用错误 ==========
    PARAM_ERROR("A000011", "参数错误"),
    USER_LOGIN_ERROR("A000012", "用户登录失败，请检查手机号和密码"),

    // ========== 二级宏观错误码 用户注册错误 ==========
    USER_REGISTER_ERROR("A000100", "用户注册错误"),
    USER_NAME_VERIFY_ERROR("A000110", "用户名校验失败"),
    USER_NAME_EXIST_ERROR("A000111", "用户名已存在"),
    USER_NAME_SENSITIVE_ERROR("A000112", "用户名包含敏感词"),
    USER_NAME_SPECIAL_CHARACTER_ERROR("A000113", "用户名包含特殊字符"),
    PASSWORD_VERIFY_ERROR("A000120", "密码校验失败"),
    PASSWORD_SHORT_ERROR("A000121", "密码长度不够"),
    PHONE_VERIFY_ERROR("A000151", "手机格式校验失败"),

    // ========== 二级宏观错误码 用户权限不足 ==========
    USER_PERMISSION_FAIL("A000200", "用户权限不足"),
    USER_NO_LOGIN("A0002010", "用户未登录"),

    // ========== 二级宏观错误码 系统请求缺少幂等Token ==========
    IDEMPOTENT_TOKEN_NULL_ERROR("A000200", "幂等Token为空"),
    IDEMPOTENT_TOKEN_DELETE_ERROR("A000201", "幂等Token已被使用或失效"),

    /**
     * B 开头的错误码定义为服务端错误
     */
    // ========== 一级宏观错误码 系统执行出错 ==========
    SERVICE_ERROR("B000001", "系统执行出错"),

    // ========== 二级宏观错误码 系统执行超时 ==========
    SERVICE_TIMEOUT_ERROR("B000100", "系统执行超时"),

    // ========== 二级宏观错误码 MQ执行失败 ==========
    MQ_SEND_ERROR("B000200", "MQ 发送失败"),
    MQ_DELAY_SEND_TIMEUNIT_ERROR("B000201", "当前 MQ 定时消息的单位只支持秒及以上"),
    MQ_DELAY_SEND_TIME_ERROR("B000202", "定时消息只允许延迟"),
    MQ_DELAY_SAVE_ERROR("B000203", "定时消息持久化失败"),

    ;

    private String code;
    private String message;

    @Override
    public String code() {
        return code;
    }

    @Override
    public String message() {
        return message;
    }
}
